package com.alibaba.shop.common.util;

import java.lang.reflect.Field;

public class BeanUtil {
    /**
     * 基于反射 实现dto属性的拷贝
     * 反射：运行时获取类的信息，可以获取雷电额属性、方法、调用类中的属性、方法*/
    public static <T> T copy(Class<T> clz, Field[] fields,Object dto){
        T obj= null;
        try {
            //1.实例化模板对象
            obj = clz.newInstance();
            //2.遍历需要拷贝的属性数组
            for(Field f:fields){
                //3.获取目标类是否存在对应的属性
                Field field=clz.getDeclaredField(f.getName());
                //4.验证是否存在
                if(field!=null){
                    //5.设置忽略访问修饰符的校验
                    f.setAccessible(true);
                    field.setAccessible(true);
                    //6.赋值
                    field.set(obj,f.get(dto));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return obj;
    }
}
